﻿package mortal.game.resource.configBase
{
    import com.gengine.debug.*;
    import com.gengine.resource.*;
    import flash.utils.*;
    import mortal.game.view.common.*;

    public class ConfigBase extends Object
    {
        protected var _data:Dictionary;
        protected var _cache:Dictionary;
        protected var _mainCache:Dictionary;

        public function ConfigBase(param1:String)
        {
            this._cache = new Dictionary();
            this._mainCache = new Dictionary();
            this.initConfig(param1);
            return;
        }// end function

        protected function initConfig(param1:String) : void
        {
            var _loc_8:Object = null;
            var _loc_9:Object = null;
            var _loc_2:* = ConfigConst.map[param1];
            if (_loc_2 == null || _loc_2 == "")
            {
                Log.debug("在ConfigConst.map中找不到：" + param1 + "的配置");
            }
            var _loc_3:* = _loc_2.split(";");
            var _loc_4:* = _loc_3[0];
            var _loc_5:* = getDefinitionByName(_loc_4) as Class;
            if (_loc_5 == null)
            {
                Log.debug("找不到类名定义：" + _loc_4);
            }
            this._data = new Dictionary();
            var _loc_6:* = ConfigManager.instance.getJSONByFileName(param1);
            if (_loc_6 == null)
            {
                Log.debug("ConfigFiles: 加载不到配置文件:" + param1);
                return;
            }
            var _loc_7:int = 0;
            for each (_loc_8 in _loc_6)
            {
                
                _loc_9 = new _loc_5;
                ClassTypesUtil.copyValue(_loc_9, _loc_8);
                var _loc_12:* = _loc_7 + 1;
                this._data[_loc_12] = _loc_9;
            }
            if (_loc_3.length >= 2)
            {
                this.addMainCache(String(_loc_3[1]));
            }
            return;
        }// end function

        private function cobine() : void
        {
            var _loc_1:TAchievementDetial2 = null;
            return;
        }// end function

        public function get data() : Dictionary
        {
            return this._data;
        }// end function

        public function addMainCache(param1:String) : void
        {
            var _loc_3:Object = null;
            var _loc_4:int = 0;
            var _loc_5:String = null;
            if (param1 == null || param1 == "")
            {
                return;
            }
            var _loc_2:* = param1.split("_");
            for each (_loc_3 in this._data)
            {
                
                param1 = _loc_3[_loc_2[0]].toString();
                _loc_4 = 1;
                while (_loc_4 < _loc_2.length)
                {
                    
                    _loc_5 = _loc_2[_loc_4] as String;
                    param1 = param1 + ("_" + _loc_3[_loc_5].toString());
                    _loc_4++;
                }
                this._mainCache[param1] = _loc_3;
            }
            return;
        }// end function

        public function delMainKey() : void
        {
            this._mainCache = null;
            return;
        }// end function

        public function getConfigFromMainCache(param1:Object) : Object
        {
            return this._mainCache[param1.toString()];
        }// end function

        public function addCache(param1:Array, param2:Dictionary = null) : void
        {
            var _loc_6:Object = null;
            var _loc_7:int = 0;
            var _loc_8:String = null;
            if (param1 == null || param1.length == 0)
            {
                return;
            }
            var _loc_3:* = this.getKey(param1);
            if (this._cache[_loc_3] != null)
            {
                return;
            }
            var _loc_4:* = this._data;
            if (param2 != null)
            {
                _loc_4 = param2;
            }
            var _loc_5:* = new Dictionary();
            this._cache[_loc_3] = _loc_5;
            for each (_loc_6 in _loc_4)
            {
                
                _loc_3 = _loc_6[param1[0]].toString();
                _loc_7 = 1;
                while (_loc_7 < param1.length)
                {
                    
                    _loc_8 = param1[_loc_7] as String;
                    _loc_3 = _loc_3 + ("_" + _loc_6[_loc_8].toString());
                    _loc_7++;
                }
                _loc_5[_loc_3] = _loc_6;
            }
            return;
        }// end function

        public function delCache(param1:Array) : void
        {
            if (param1 == null || param1.length == 0)
            {
                return;
            }
            var _loc_2:* = this.getKey(param1);
            if (this._cache[_loc_2] != null)
            {
                delete this._cache[_loc_2];
            }
            return;
        }// end function

        private function getKey(param1:Array) : String
        {
            var _loc_2:String = "";
            var _loc_3:int = 0;
            while (_loc_3 < param1.length)
            {
                
                _loc_2 = _loc_2 + param1[_loc_3].toString();
                _loc_3++;
            }
            return _loc_2;
        }// end function

        public function getConfigFromCache(param1:Array, param2:Array) : Object
        {
            if (param1 == null || param1.length == 0 || param2 == null || param2.length == 0)
            {
                return null;
            }
            var _loc_3:* = this.getKey(param1);
            var _loc_4:* = this._cache[_loc_3];
            if (_loc_4 == null)
            {
                return null;
            }
            return _loc_4[this.getKey(param2)];
        }// end function

        public function getConfigs(param1:Array, param2:Array, param3:Dictionary = null) : Array
        {
            var _loc_6:Object = null;
            var _loc_7:int = 0;
            var _loc_8:String = null;
            var _loc_4:* = this._data;
            if (param3 != null)
            {
                _loc_4 = param3;
            }
            var _loc_5:Array = [];
            if (_loc_4 == null)
            {
                return _loc_5;
            }
            if (param1 == null || param1.length == 0)
            {
                return this.dicToArray(_loc_4);
            }
            if (param1 == null || param1.length == 0 || param2 == null || param2.length == 0)
            {
                return this.dicToArray(_loc_4);
            }
            for each (_loc_6 in _loc_4)
            {
                
                _loc_7 = 0;
                while (_loc_7 < param1.length)
                {
                    
                    _loc_8 = param1[_loc_7] as String;
                    if (_loc_6[_loc_8] != param2[_loc_7])
                    {
                        break;
                    }
                    if (_loc_7 == (param1.length - 1))
                    {
                        _loc_5.push(_loc_6);
                    }
                    _loc_7++;
                }
            }
            return _loc_5;
        }// end function

        private function dicToArray(param1:Dictionary) : Array
        {
            var _loc_3:* = undefined;
            var _loc_2:Array = [];
            if (param1 == null)
            {
                return _loc_2;
            }
            for each (_loc_3 in param1)
            {
                
                _loc_2.push(_loc_3);
            }
            return _loc_2;
        }// end function

    }
}
